package com.learning.dubbo.base.config.code.provider;

import com.learning.dubbo.base.config.code.api.GreetingsService;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;

import java.util.concurrent.CountDownLatch;

/**
 * ClassName: Provider
 * Description:
 * Date: 2020/6/15 13:43 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
public class Provider {
    public static void main(String[] args) throws Exception {

        // 服务实现
        GreetingsService demoService = new GreetingsServiceImpl();

        // 当前应用配置。 请学习ApplicationConfig的API
        ApplicationConfig application = new ApplicationConfig();
        application.setName("hello-world-app");

        // 连接注册中心配置。 请学习RegistryConfig的API
        RegistryConfig registry = new RegistryConfig("224.5.6.7:1234", "multicast");

        // 服务提供者协议配置
        ProtocolConfig protocol = new ProtocolConfig();
        protocol.setName("dubbo");
        protocol.setPort(12345);
        protocol.setThreads(200);

        // 注意：ServiceConfig为重对象，内部封装了与注册中心的连接，以及开启服务端口
        // 服务提供者暴露服务配置。请学习ServiceConfig的API
        // 此实例很重，封装了与注册中心的连接，请自行缓存，否则可能造成内存和连接泄漏
        ServiceConfig<GreetingsService> service = new ServiceConfig<>();
        service.setApplication(application);
        // 多个注册中心可以用setRegistries()
        service.setRegistry(registry);
        // 多个协议可以用setProtocols()
        service.setProtocol(protocol);
        service.setInterface(GreetingsService.class);
        service.setRef(demoService);
        service.setVersion("1.0.0");

        // 暴露及注册服务
        service.export();

        System.out.println("dubbo service started");
        new CountDownLatch(1).await();

    }
}
  